package Day021_反射_注解.demo6_反射之操作成员变量;

import java.lang.reflect.Field;

/**
 * @Author：pengzhilin
 * @Date: 2020/5/14 11:07
 * @version 1.1
 */
public class Test1 {
    public static void main(String[] args) throws Exception{
        /*
            反射之操作成员变量:
                - Field类概述 : 每一个成员变量都是一个Field类的对象。
                - 通过反射获取类的成员变量
                        Class类中与Field相关的方法
                            * Field getField(String name);获取单个public修饰的成员变量
                                *  根据成员变量名获得对应Field对象，只能获得public修饰
                            * Field getDeclaredField(String name);获取单个任意修饰符修饰的成员变量
                                *  根据成员变量名获得对应Field对象，包括public、protected、(默认)、private的
                            * Field[] getFields();获取所有的public修饰的成员变量
                                * 获得所有的成员变量对应的Field对象，只能获得public的
                            * Field[] getDeclaredFields();获取所有的成员变量
                                * 获得所有的成员变量对应的Field对象，包括public、protected、(默认)、private的
                     结论:
                        Field getDeclaredField(String name);获取单个任意修饰符修饰的成员变量
                            参数:成员变量名  字符串类型
                        Field[] getDeclaredFields();获取所有的成员变量

                - 通过反射访问成员变量
         */
        // 通过反射获取类的成员变量
        // 1.获取Student类的Class对象
        Class<?> c = Class.forName("com.itheima.demo6_反射之操作成员变量.Student");

        // 2. 获取单个成员变量的Field对象
        // 2.1 获取单个public修饰的成员变量
        Field nameF = c.getDeclaredField("name");
        System.out.println(nameF);

        // 2.2 获取单个private修饰的成员变量
        Field sexF = c.getDeclaredField("sex");
        System.out.println(sexF);

        System.out.println("==============================================");

        // 3.获取所有的成员变量的Field对象
        Field[] fieldArr = c.getDeclaredFields();
        for (Field field : fieldArr) {
            System.out.println(field);
        }


    }
}
